﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using Maestro_Proveedores;

namespace Maestro_Proveedores.Forms
{
    public partial class RegistrarProveedor : Form
    {
        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "066";
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;
        /// <summary>
        /// <para>Este formulario tiene la responsabilidad de gestionar la informacion correspondiente a los proveedores de la Corporación, tanto la informacion basica (razon social, representante legal, etc.), como la informacion secundaria (tipo de alianza, ciudades de las sucursales, nombres de contactos, etc.).</para>
        /// <para>Es importante anotar que este es el formulario principal del maestro de proveedores, ya que tiene la responsabilidad de migrar la información de los proveedores desde INFOR (utilizando la clase herramientas.Migracion), y de realizar distintas tareas que ayudan a facilitar la gestion de la informacion de los proveedores.</para>
        /// </summary>
        public RegistrarProveedor()
        {
            InitializeComponent();
            this.fecha_inscripcionDateTimePicker.MaxDate = System.DateTime.Now.Date;
            this.fechaDateTimePicker.MaxDate = System.DateTime.Now.Date;
            this.vigenciaDateTimePicker.MinDate = System.DateTime.Now.Date;
            this.fecha_vencimientoDateTimePicker.MinDate = System.DateTime.Now.Date;
        }

        #region metodos del formulario
                
        private void registrarProveedor_Load(object sender, EventArgs e)
        {               
            //--- registrar los estado de los bienes/servicios
            this.cORPORATIVADataSet.ESTADO.AddESTADORow(true, "PRINCIPAL");
            this.cORPORATIVADataSet.ESTADO.AddESTADORow(false, "Secundario");

            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_RECLAMO' Puede moverla o quitarla según sea necesario.
            this.pRV_CERTIFICADO_CALIDADTableAdapter.Fill(this.cORPORATIVADataSet.PRV_CERTIFICADO_CALIDAD);
            this.pRV_ALIANZATableAdapter.Fill(this.cORPORATIVADataSet.PRV_ALIANZA);
            this.pRV_RECLAMOTableAdapter.Fill(this.cORPORATIVADataSet.PRV_RECLAMO);
            this.pRV_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_servicio);
            this.pRV_proveedor_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_proveedor_servicio);
            this.mAE_CIUDADESTableAdapter.Fill(this.cORPORATIVADataSet.MAE_CIUDADES);
            this.mAE_DPTOSTableAdapter.Fill(this.cORPORATIVADataSet.MAE_DPTOS);
            this.mAE_PAISESTableAdapter.Fill(this.cORPORATIVADataSet.MAE_PAISES);
            this.pRV_bancoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_banco);

            this.mAEDPTOSBindingSource.Filter = "ID_PAIS=0";
            this.mAECIUDADESBindingSource.Filter = "ID_DEPARTAMENTO=0";

            this.marcaComboBox.DataSource = Arreglos.Marcas;
            this.tipo_de_alianzaComboBox.DataSource = Arreglos.TipoAlianzasProveedores;

            //MessageBox.Show("pilas..");
            //--- revisar el estado de los proveedres.
             new RevisarEstadoProveedores().ShowDialog();

            //--- auditoria
            if (ConfiguracionDelSistema.auditar)
            {
                Session.SEG_PERMISOSTableAdapter.FillByTipoGrupo(Session.AUDITORIADataSet.SEG_PERMISOS, TIPO + Session.Seg_USUARRow.CODGRU);
                this.seg_PERMRow = Session.AUDITORIADataSet.SEG_PERMISOS[0];
            }

            //--imagen por defecto
            //MessageBox.Show(Application.StartupPath + "/images/imagen_no_disponible.jpg");
            //return;
            //FileStream fsBLOBFile = new FileStream(Application.StartupPath+"/images/imagen_no_disponible.jpg", FileMode.Open, FileAccess.Read);
            //byte[] bytBLOBData = new byte[fsBLOBFile.Length];
            //fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length);
            //this.logoPictureBox.Image = this.ImagePorDefectoPictureBox.Image;
        }

        private void registrarProveedor_Activated(object sender, EventArgs e)
        {
            //--- actualizar la lista delos bancos
            this.pRV_bancoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_banco);
            //--- verificar si se han modificado los bienes/servicios, en caso de que si se hallan hecho modificaciones, actualizo los datatables correspondientes en este formulario.
            if (((INDEX)herramientas.Redirect.MdiContainer).aux == true)
            {
                this.pRV_servicioTableAdapter.Fill(this.cORPORATIVADataSet.PRV_servicio);
                ((INDEX)herramientas.Redirect.MdiContainer).aux = false;
            }
            //--- revierto los cambios que se hallan hecho en los servicios "Esto se realiza para solucionar un error que se presenta AVECES al asignar los bienes/servicios a los proveedores"
            this.pRV_proveedor_servicioBindingNavigatorDeshacerItem_Click(null, null);
        }

        #endregion

        #region Exepciones en la insercion de datos

        private void dataError(object sender, DataGridViewDataErrorEventArgs e)
        {
        }

        #endregion

        #region Eventos asociados a los botones del BindingNavigator


        private void pRV_proveedor_servicioBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---actualizar la lista
                this.pRV_proveedor_servicioTableAdapter.Update(this.cORPORATIVADataSet.PRV_proveedor_servicio);
                //--- el siguiente fillBy() me toco hacerlo por que se presentaba un error al actualizar y en el momento no encontre otra solucion mejor que esta.
                this.pRV_proveedor_servicioTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_proveedor_servicio,this.idTextBox.Text);
                //---actualizar la lista
                this.pRV_proveedor_servicioTableAdapter.Update(this.cORPORATIVADataSet.PRV_proveedor_servicio);
                
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_proveedor_servicio, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }                
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void PRV_cuenta_bancariaSAVE_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_cuenta_bancaria, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_cuenta_bancariaTableAdapter.Update(this.cORPORATIVADataSet.PRV_cuenta_bancaria);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_sucursalSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.fecha_inscripcionDateTimePicker.Value = this.fecha_inscripcionDateTimePicker.Value.AddMinutes(1);

                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_sucursal, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_sucursalTableAdapter.Update(this.cORPORATIVADataSet.PRV_sucursal);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        private void pRV_contactoSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_contacto, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_contactoTableAdapter.Update(this.cORPORATIVADataSet.PRV_contacto);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void pRV_representacion_exclusivaSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_representacion_exclusiva, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_representacion_exclusivaTableAdapter.Update(this.cORPORATIVADataSet.PRV_representacion_exclusiva);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void pRV_embargoSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_embargo, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_embargoTableAdapter.Update(this.cORPORATIVADataSet.PRV_embargo);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void pRVllamadosatencionSAVEtoolStripButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- guardo el archivo de soporte
                if (!this.guardarArchivoDocumentoLLamadosAtencion())
                    return;

                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.fechaDateTimePicker.Value = this.fechaDateTimePicker.Value.AddMinutes(1);

                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_llamados_atencion, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_llamados_atencionTableAdapter.Update(this.cORPORATIVADataSet.PRV_llamados_atencion);
            }
            catch (Exception ex)
            {
                //-- si se presenta algun error, borro el archivo de soporte, de tal modo que el usuario debe seleccionarlo de nuevo.
                herramientas.File.deleteFile(ConfiguracionDelSistema.directorioLlamadosAtencion + this.archivo_documentosTextBox.Text);
                //-- borro el contenido del campo
                this.archivo_documentosTextBox.Text = string.Empty;

                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void PRV_ALIANZAS_SAVE_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.vigenciaDateTimePicker.Value = this.vigenciaDateTimePicker.Value.AddMinutes(1);

                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_ALIANZA, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_ALIANZATableAdapter.Update(this.cORPORATIVADataSet.PRV_ALIANZA);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void pRV_CERTIFICADO_CALIDADSave_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.fecha_vencimientoDateTimePicker.Value = this.fecha_vencimientoDateTimePicker.Value.AddMinutes(1);

                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_CERTIFICADO_CALIDAD, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_CERTIFICADO_CALIDADTableAdapter.Update(this.cORPORATIVADataSet.PRV_CERTIFICADO_CALIDAD);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void pRV_proveedor_servicioBindingNavigatorDeshacerItem_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                this.cORPORATIVADataSet.PRV_proveedor_servicio.RejectChanges();
                this.pRV_proveedor_servicioBindingSource.CancelEdit();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                //bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }    

        private void pRV_proveedor_servicioBindingNavigatorAddItem_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                this.cORPORATIVADataSet.PRV_proveedor_servicio.RejectChanges();
                bs.CancelEdit();
                bs.AddNew();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }

        private void add_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.AddNew();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }

        private void deshacer_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    if (bs.DataMember.ToString().Contains(dt.TableName))
                    {
                        dt.RejectChanges();
                        bs.CancelEdit();
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filter_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.RemoveFilter();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filterText_TextChanged(object sender, EventArgs e)
        {

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripTextBox)sender).GetCurrentParent()).BindingSource;
            ToolStripTextBox tb = (ToolStripTextBox)sender;
            try
            {
                String filtro = "";
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    //MessageBox.Show(dt.TableName + "-" + bs.DataMember.ToString());
                    if (bs.DataMember.ToString().Contains(dt.TableName))
                    {
                        foreach (DataColumn cl in dt.Columns)
                        {
                            filtro += cl.ColumnName.ToString() + "+' '+";
                        }
                        filtro = filtro.Substring(0, filtro.Length - 5);
                        filtro += " like'%" + tb.Text + "%'";
                        // MessageBox.Show(filtro);
                        bs.Filter = filtro;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filtrarServicioTextBox_TextChanged(object sender, EventArgs e)
        {
            this.pRVservicioBindingSource.Filter = "descripcion like '%" + filtrarServicioTextBox.Text + "%'";
        }

        #endregion

        #region Eventos asociados a la busqueda de los proveedores por el NIT y a la migracion de los datos (AQUI SE HACE LA CONSULTA DIRECTAMANETE EN  INFOR XA )

        private void buscar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.buscar_Click(null, null);
            }
        }

        private void datosDesdeProv()
        {
            //---- PILASSS!!!!.... para hacer que estos registros dependan del Id_proveedor, debes modificar los bindingSources---> DataSource: bindingSource_prv_Proveedor y en DataMember va la clave foranea correspondiente a la nueva tabla...
            this.pRV_proveedor_servicioTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_proveedor_servicio, this.idTextBox.Text);
            this.pRV_cuenta_bancariaTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_cuenta_bancaria, this.idTextBox.Text);
            this.pRV_sucursalTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_sucursal, this.idTextBox.Text);
            this.pRV_contactoTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_contacto, this.idTextBox.Text);
            this.pRV_representacion_exclusivaTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_representacion_exclusiva, this.idTextBox.Text);
            this.pRV_embargoTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_embargo, this.idTextBox.Text);
            this.pRV_llamados_atencionTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_llamados_atencion, this.idTextBox.Text);
            this.pRV_CERTIFICADO_CALIDADTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_CERTIFICADO_CALIDAD, this.idTextBox.Text);
            this.pRV_ALIANZATableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_ALIANZA, this.idTextBox.Text);
        }

        private void buscar_Click(object sender, EventArgs e)
        {
            if (this.buscar_textBox.Text == "")
            {
                return;
            }

            Cursor.Current = Cursors.WaitCursor;
            try
            {
                int filas = 0;
                string ID = string.Empty;
                //--- si tiene 4 o menos caracteres es el ID
                if (this.buscar_textBox.Text.Length <= 4)
                {
                    filas = this.prV_proveedorTableAdapter1.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.buscar_textBox.Text);
                }
                //--- si tiene mas de 4 caracteres es el NIT
                else
                {
                    filas = this.prV_proveedorTableAdapter1.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.buscar_textBox.Text);
                }
                if (0 < filas)
                {
                    
                    foreach (_Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORRow row in this.cORPORATIVADataSet.PRV_PROVEEDOR)
                    {
                        //---- verifico si es extranjero, para darle la opcion de gestionar las cuentas bancarias.
                        if (!bool.Parse(row.is_nacional.ToString()))
                        {
                            this.PRV_cuenta_bancariaADD.Enabled = true;
                            this.PRV_cuenta_bancariaDELETE.Enabled = true;
                            this.PRV_cuenta_bancariaSAVE.Enabled = true; 
                        }
                        //---- verifico si es CLIENTE, para darle la opcion de gestionar las cuentas bancarias.
                        else if (row.nit.Substring(0, 4).Equals("4444"))
                        {
                            this.PRV_cuenta_bancariaADD.Enabled = true;
                            this.PRV_cuenta_bancariaDELETE.Enabled = true;
                            this.PRV_cuenta_bancariaSAVE.Enabled = true;
                        }
                        else
                        {
                            this.PRV_cuenta_bancariaADD.Enabled = false;
                            this.PRV_cuenta_bancariaDELETE.Enabled = false;
                            this.PRV_cuenta_bancariaSAVE.Enabled = false;
                        }
                    }


                    //---- verifico si se actualizaron los datos del proveedor.
                    if (Migracion.actualizaDatosProveedor(this.cORPORATIVADataSet.PRV_PROVEEDOR.Rows[0]["id"].ToString()))
                        //---- actualizo la lista de bancos, suponiendo que no lo encontro y lo guardo como un nuevo registro                                            
                        this.pRV_bancoTableAdapter.Fill(this.cORPORATIVADataSet.PRV_banco);
                    //---- traigo los datos desde PRV_PROVEEDOR
                    this.datosDesdeProv();
                    //-- esto es para activar un nuevo registro en cada uno de los datos no basicos del proveedor (sucursales, contactos, embargos, etc...) inmediatamente despues que se consiga el NIT del proveedor
                    this.pRV_contactoBindingSource.AddNew();
                    this.pRV_embargoBindingSource.AddNew();
                    //this.pRV_proveedor_servicioBindingSource.AddNew();
                    this.pRV_representacion_exclusivaBindingSource.AddNew();
                    this.pRV_sucursalBindingSource.AddNew();
                    this.pRVllamadosatencionBindingSource.AddNew();
                    this.pRV_CERTIFICADO_CALIDADBindingSource.AddNew();
                    this.pRV_ALIANZABindingSource.AddNew();
                    this.pRV_cuenta_bancariaBindingSource.AddNew();
                    this.is_principalCheckBox.Checked = true;
                    //-- actualizo los valores de las fechas, para evitar que salga el mensaje que dice que debe seleccionar la fecha.
                    //this.vigenciaDateTimePicker.Value = DateTime.Now.AddDays(1);
                    //this.fecha_vencimientoDateTimePicker.Value = DateTime.Now.AddDays(1);
                    //this.fecha_inscripcionDateTimePicker.Value = DateTime.Now.AddDays(-1);
                    //this.fechaDateTimePicker.Value = DateTime.Now.AddDays(-1);

                }
                else if (Migracion.migrarDesdeInforXa(this.buscar_textBox.Text))
                {
                    this.buscar_Click(null, null);
                    //--colocar la imagen por defecto al proveedor
                    this.guardar_imagen_por_defecto();                    
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }

        #endregion

        #region Eventos para la buscar la busqueda de las ciudades (esto solo aplicac a la pestaña de sucursales)

        private void ubicacion_combobox_1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this.mAEDPTOSBindingSource.Filter = "ID_PAIS=" + this.ubicacion_combobox_1.SelectedValue.ToString();
                this.mAECIUDADESBindingSource.Filter = "ID_DEPARTAMENTO=0";
            }
            catch (Exception)
            { }
        }

        private void ubicacion_combobox_2_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this.mAECIUDADESBindingSource.Filter = "ID_DEPARTAMENTO=" + this.ubicacion_combobox_2.SelectedValue.ToString();
            }
            catch (Exception) { }

        }
        #endregion

        private void pRV_proveedor_servicioDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            this.pRVservicioBindingSource.RemoveFilter();
            this.filtrarServicioTextBox.Text = "";
        }
      
        private void nombre_popularTextBox_Leave(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            this.Cursor = Cursors.WaitCursor;
            try
            {
                if (this.prV_proveedorTableAdapter1.Update_nombrePopular(this.nombre_popularTextBox.Text, idTextBox.Text) == 0)
                {
                    MessageBox.Show("No fue posible actualizar el nombre popular.");
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void atributos_ocultosTextBox_Leave(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            this.Cursor = Cursors.WaitCursor;
            try
            {
                if (this.prV_proveedorTableAdapter1.Update_atributosOcultos(this.atributos_ocultosTextBox.Text, idTextBox.Text) == 0)
                {
                    MessageBox.Show("No fue posible actualizar los atributos ocultos.");
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void logoPictureBox_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            this.Cursor = Cursors.WaitCursor;
            OpenFileDialog saveFileDialog = new OpenFileDialog();
            saveFileDialog.Filter = "(*.png)|*.png|(*.jpg)|*.jpg";//"txt files (*.txt)|*.txt|All files (*.*)|*.*";
            saveFileDialog.FilterIndex = 0;
            saveFileDialog.Multiselect = false;
            saveFileDialog.RestoreDirectory = true;

            if (saveFileDialog.ShowDialog() != DialogResult.OK)
            {
                this.Cursor = Cursors.Default;
                return;
            }
            
            this.prV_proveedorTableAdapter1.Update_logo(herramientas.File.fileToByte(saveFileDialog.FileName), this.idTextBox.Text);
            this.logoPictureBox.Image = herramientas.File.fileToImage(saveFileDialog.FileName);
            this.Cursor = Cursors.Default;
        }

        private void guardar_imagen_por_defecto()
        {
            byte[] imageInByte;
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    this.ImagePorDefectoPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    imageInByte = ms.ToArray();
                }

                if (this.prV_proveedorTableAdapter1.Update_logo(imageInByte, this.idTextBox.Text) > 0)
                    this.logoPictureBox.Image = this.ImagePorDefectoPictureBox.Image;
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        private void borrarLogoButtom_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            if (MessageBox.Show("¿Desea borrar el logo actual?", "", MessageBoxButtons.YesNo).Equals(DialogResult.No))
            {
                return;
            }
            this.Cursor = Cursors.WaitCursor;
            byte[] imageInByte;

            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    this.ImagePorDefectoPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    imageInByte = ms.ToArray();
                }
                this.prV_proveedorTableAdapter1.Update_logo(imageInByte, this.idTextBox.Text);
                this.logoPictureBox.Image = this.ImagePorDefectoPictureBox.Image;
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
        }

        //--- Colocarle la imagen por defecto a todos los registros de proveedores, 
        //--- esta imagen se saca el campo: this.ImagePorDefectoPictureBox.Image
        //--- ESTE METODO SE CREO PARA ACTUALIZAR EL LOGO DE LOS 600 PROVEEDORES REGISTRADOS HASTA LA FECHA
        private void actualizar_imagenes_por_defecto(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea colocar el logo por defecto a todos los proveedores?.\nSe perderan todos los logos asociados hasta la fecha.", "", MessageBoxButtons.YesNo).Equals(DialogResult.No))
            {
                return;
            }
            return;
            this.Cursor = Cursors.WaitCursor;
            _Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORDataTable pRV_PROVEEDORDataTable_temp = new  _Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORDataTable();

            try
            {
                this.prV_proveedorTableAdapter1.Fill(pRV_PROVEEDORDataTable_temp);
            }
            catch (Exception) {}

            byte[] imageInByte;
            int i = 0;
            
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    this.ImagePorDefectoPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    imageInByte = ms.ToArray();
                }
                foreach (_Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORRow row in pRV_PROVEEDORDataTable_temp)
                {
                    i += this.prV_proveedorTableAdapter1.Update_logo(imageInByte, row.id);
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            this.Cursor = Cursors.Default;
            MessageBox.Show(i + " Proveedores actualizados.");            
        }

        private void guardarDocumentosButton_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;
            //-- Mover el archivo al directorio remoto.
            string nuevoArchivo = herramientas.File.newFile(ConfiguracionDelSistema.directorioRegistroProveedores);

            //-- subir el archivo al directorio remoto
            if (nuevoArchivo.Equals(string.Empty))
            {
                return;
            }

            if (!this.archivo_documentosTextBox.Text.Equals(string.Empty))
            {
                //-- si ya tenia un archivo adjunto, lo muevo a la carpeta de archivos eliminados
                if (!herramientas.File.moveFileToReciclerDirectory(ConfiguracionDelSistema.directorioRegistroProveedores+this.archivo_documentosTextBox.Text))
                {
                    return;
                }
            }
            //--- guardo el nombre del nuevo archivo en el campo coorespondiente del formulario
            this.archivo_documentosTextBox.Text = nuevoArchivo;
            //--- guardo los cambios en la BD.
            this.prV_proveedorTableAdapter1.Update_archivoDocumentos(nuevoArchivo, this.idTextBox.Text);
        }

        private void AbrirPictureBox_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            if (!this.archivo_documentosTextBox.Text.Equals(string.Empty))
            {
                //-- verificar que exista la carpeta Temp
                if (!System.IO.Directory.Exists("C:/Temp"))
                    System.IO.Directory.CreateDirectory("C:/Temp");
                //-- guardar el archivo en la carpeta temporal
                if (!herramientas.File.copyFile(ConfiguracionDelSistema.directorioRegistroProveedores + this.archivo_documentosTextBox.Text, "C:/Temp/" + this.archivo_documentosTextBox.Text))
                {
                    return;
                }
                //-- si el archivo se creo bien, lo abro..
                System.Diagnostics.Process.Start("C:/Temp/" + this.archivo_documentosTextBox.Text);
            }
        }

        private void DescargarArchivoPictureBox_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            if (!this.archivo_documentosTextBox.Text.Equals(string.Empty)) 
            {
                if (!herramientas.File.copyFile(ConfiguracionDelSistema.directorioRegistroProveedores + this.archivo_documentosTextBox.Text)) 
                {
                    //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                }
            }
        }

        private void helpPictureBox_Click(object sender, EventArgs e)
        {               
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void guardarDatosAdjuntosLLamadosAtencionButton_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            //-- si el id es menor que cero (nuevo registro), entonces guardo la ruta del archivo en campo archivo_soporteTextBox
            if ((int.Parse(((System.Data.DataRowView)this.pRVllamadosatencionBindingSource.Current)["id"].ToString())) <= 0)
            {
                this.Cursor = Cursors.WaitCursor;
                try
                {
                    OpenFileDialog saveFileDialog = new OpenFileDialog();
                    saveFileDialog.Multiselect = false;
                    saveFileDialog.RestoreDirectory = true;

                    if (saveFileDialog.ShowDialog() != DialogResult.OK)
                    {
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    this.archivo_documentosLLamadosAtencionTextBox.Text = saveFileDialog.FileName;
                }
                catch (Exception ex)
                {
                    Maestro_Proveedores.herramientas.MessageException.show(ex);
                }
                this.Cursor = Cursors.Default;
            }
            //-- si el ID es positivo es por que se esta actualizando el registro, en este caso voy a actualizar el soporte
            else
            {
                string temp = string.Empty;
                temp = herramientas.File.newFile(ConfiguracionDelSistema.directorioLlamadosAtencion);
                if (temp.Equals(string.Empty))
                {
                    return;
                }
                //--muevo el archivo anterior a la carpeta de archivos eliminados
                if (!herramientas.File.moveFileToReciclerDirectory(ConfiguracionDelSistema.directorioLlamadosAtencion + this.archivo_documentosLLamadosAtencionTextBox.Text))
                {
                    //  MessageBox.Show("Error moviendo el archivo a la carpeta de eliminados.");
                    return;
                }
                this.archivo_documentosLLamadosAtencionTextBox.Text = temp;
            }
        }

        private void DescargarArchivoLLamadosAtencionPictureBox_Click(object sender, EventArgs e)
        {
            //-- si no se ha seleccionado el proveedor, me salgo
            if (this.idTextBox.Text.Equals(string.Empty))
                return;
            //-- si no hay archivo, me salgo
            if (this.archivo_documentosLLamadosAtencionTextBox.Text.Equals(string.Empty))
                return;
            //-- si el id es menor que cero (nuevo registro), entonces no se descarga nada
            if ((int.Parse(((System.Data.DataRowView)this.pRVllamadosatencionBindingSource.Current)["id"].ToString())) <= 0)
                return;
            //-- descargo el archivo
            if (!herramientas.File.copyFile(ConfiguracionDelSistema.directorioLlamadosAtencion + this.archivo_documentosLLamadosAtencionTextBox.Text))
            {
                return;
            }
        }

        private bool guardarArchivoDocumentoLLamadosAtencion()
        {
            if (this.archivo_documentosLLamadosAtencionTextBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe adjuntar un archivo de soporte al llamado de atención.");
                return false;
            }
            //-- si el id es menor que cero (nuevo registro), entonces guardo el archivo en la carpeta correspondiente y guardo el nombr q se le asigno.
            if ((int.Parse(((System.Data.DataRowView)this.pRVllamadosatencionBindingSource.Current)["id"].ToString())) <= 0)
            {
                string file = string.Empty;
                file = herramientas.File.newFile(this.archivo_documentosLLamadosAtencionTextBox.Text, ConfiguracionDelSistema.directorioLlamadosAtencion);
                if (file.Equals(string.Empty))
                {
                    return false;
                }
                this.archivo_documentosLLamadosAtencionTextBox.Text = file;
            }
            return true;
        }

        private bool eliminarArchivoDocumentoLLamadosAtencion()
        {
            if (this.archivo_documentosLLamadosAtencionTextBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe adjuntar un archivo de soporte a la calificacion.");
                return false;
            }
            string file = string.Empty;
            file = herramientas.File.newFile(this.archivo_documentosLLamadosAtencionTextBox.Text, ConfiguracionDelSistema.directorioLlamadosAtencion);
            if (file.Equals(string.Empty))
            {
                return false;
            }
            this.archivo_documentosLLamadosAtencionTextBox.Text = file;
            return true;
        }

        private void abrirLLamadosAtencionPictureBox_Click(object sender, EventArgs e)
        {
            //-- si no se ha seleccionado el proveedor, me salgo
            if (this.idTextBox.Text.Equals(string.Empty))
                return;
            //-- si no hay archivo, me salgo
            if (this.archivo_documentosLLamadosAtencionTextBox.Text.Equals(string.Empty))
                return;
            //-- si el id es menor que cero (nuevo registro), entonces no se descarga nada
            if ((int.Parse(((System.Data.DataRowView)this.pRVllamadosatencionBindingSource.Current)["id"].ToString())) <= 0)
                return;
            //-- verificar que exista la carpeta Temp
            if (!System.IO.Directory.Exists("C:/Temp"))
                System.IO.Directory.CreateDirectory("C:/Temp");
            //-- guardar el archivo en la carpeta temporal
            if (!herramientas.File.copyFile(ConfiguracionDelSistema.directorioLlamadosAtencion + this.archivo_documentosLLamadosAtencionTextBox.Text, "C:/Temp/" + this.archivo_documentosLLamadosAtencionTextBox.Text))
            {
                return;
            }
            //-- si el archivo se creo bien, lo abro..
            try
            {
                System.Diagnostics.Process.Start("C:/Temp/" + this.archivo_documentosLLamadosAtencionTextBox.Text);
            }
            catch (Exception ex) 
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void EncontrarProveedorPictureBox_Click(object sender, EventArgs e)
        {
            try
            {
                herramientas.Redirect.getFormulario("BuscarProveedor").ShowDialog();
                //-- una vez se cierre el asistente utilizo el ID que supuestamente se selecciono de este formulario y lo guardo en el campo de busqueda.
                this.buscar_textBox.Text = ((Forms.BuscarProveedor)herramientas.Redirect.getFormulario("BuscarProveedor")).IdEncontrado;
                //-- si el valor no es vacio, tonces realizo la busqueda.
                if (!this.buscar_textBox.Text.Equals(string.Empty))
                {
                    this.buscar_Click(null, null);
                }
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "registrarProveedor.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void eval_desempeno_anoTextBox_Leave(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            this.Cursor = Cursors.WaitCursor;
                       

            try
            {
                //--- verifico el dato que se ingresa.
                decimal ok = decimal.Parse(this.eval_desempeno_anoTextBox.Text);
                if (ok > 100 || ok < -1)
                {
                    MessageBox.Show("El resultado de la evaluación debe ser un valor comprendido entre 0 y 100.");
                    this.eval_desempeno_anoTextBox.Text = "-1,00";
                    return;
                }
                //-- actualizo el valor
                if (this.prV_proveedorTableAdapter1.Update_evalDesempenoAno(ok, idTextBox.Text) == 0)
                {
                    MessageBox.Show("No fue posible actualizar la evaluacion.");
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                this.eval_desempeno_anoTextBox.Text = "-1,00";                    
            }
            this.Cursor = Cursors.Default;
        }  
    }
}
